#include "InformacionPieza.h"

InformacionPieza::InformacionPieza(unsigned long int nroPieza) {

	this->nroPieza = nroPieza;
	this->bajando = false;
}

InformacionPieza::~InformacionPieza() {


}


unsigned long int InformacionPieza::getNroPieza() const {

	return this->nroPieza;
}

list<string> InformacionPieza::getCandidatos() {

	this->mutexCandidatos.lock();
	 list<string> cantidatos = this->candidatos;
	this->mutexCandidatos.unlock();
	return cantidatos;
}

void InformacionPieza::agregarCandidato(const string &candidatoId) {

	this->mutexCandidatos.lock();
	 this->candidatos.push_back(candidatoId);
	this->mutexCandidatos.unlock();
}


void InformacionPieza::quitarCantidado(const string &candidato) {

	this->mutexCandidatos.lock();
	list<string>::iterator it = this->candidatos.begin();
	bool encontrado = false;

	while (!encontrado && it != this->candidatos.end()) {

		if (candidato == *it) {
			encontrado = true;
			this->candidatos.erase(it);
		}
		it++;
	}

	this->mutexCandidatos.unlock();
}


bool InformacionPieza::getBajando() {

	this->mutexBajando.lock();
	bool aux = this->bajando;
	this->mutexBajando.unlock();

	return aux;
}

void InformacionPieza::setBajando(bool bajando) {

	this->mutexBajando.lock();
	this->bajando = bajando;
	this->mutexBajando.unlock();
}

bool InformacionPieza::seEncuentraElCandidato(const string &candidatoId) {

	this->mutexCandidatos.lock();
	list<string>::iterator it = this->candidatos.begin();
	bool encontrado = false;

	while ((!encontrado) && (it != this->candidatos.end())) {

		if (*it == candidatoId) {
			encontrado = true;
		}
	}
	this->mutexCandidatos.unlock();

	return encontrado;
}

unsigned int InformacionPieza::getCantidadCandidatos() {

	this->mutexCandidatos.lock();
	unsigned int cantidad = this->candidatos.size();
	this->mutexCandidatos.unlock();

	return cantidad;
}
